'use strict';

/**
 * 测试云函数：给指定用户添加可提现余额并修复OpenID格式
 * 用途：快速测试微信支付提现接口
 *
 * 使用方法：
 * 1. 上传此云函数
 * 2. 在 HBuilderX 中右键点击此云函数
 * 3. 选择"云函数/云对象运行"
 * 4. 输入参数：{ "userId": "68ebc3c1149854abcbe844a8", "amount": 100, "fixOpenId": true }
 * 5. 点击运行
 */

const db = uniCloud.database();
const dbCmd = db.command;

exports.main = async (event, context) => {
  console.log('========== 测试添加余额云函数 ==========');

  const { userId, amount, fixOpenId, testOpenId } = event;

  // 参数验证
  if (!userId) {
    return {
      code: 400,
      message: '缺少参数：userId'
    };
  }

  if (!amount || amount <= 0 || !Number.isInteger(amount)) {
    return {
      code: 400,
      message: '金额必须是正整数（单位：分）'
    };
  }

  try {
    // 1. 检查用户是否存在
    const userRes = await db.collection('users').doc(userId).get();
    if (!userRes.data || userRes.data.length === 0) {
      return {
        code: 404,
        message: `用户不存在：${userId}`
      };
    }

    const user = userRes.data[0];
    console.log(`找到用户：${user.nickname || '未设置昵称'}`);
    console.log(`当前可提现余额：${user.commission_available || 0} 分`);
    console.log(`当前wx_openid：${JSON.stringify(user.wx_openid)}`);

    // 2. 修复 OpenID 格式（如果需要）
    if (fixOpenId) {
      console.log('开始修复 OpenID 格式...');

      let newWxOpenid = {};

      if (typeof user.wx_openid === 'string') {
        // 如果是字符串，转换为对象格式
        console.log('检测到 wx_openid 是字符串格式，转换为对象格式');
        newWxOpenid = {
          mp: user.wx_openid  // 将字符串作为小程序的 openid
        };
      } else if (typeof user.wx_openid === 'object' && user.wx_openid !== null) {
        // 如果已经是对象，检查是否有 mp 字段
        newWxOpenid = { ...user.wx_openid };
        if (!newWxOpenid.mp) {
          console.log('检测到 wx_openid 对象中没有 mp 字段');
          if (testOpenId) {
            // 如果提供了测试 OpenID，使用它
            console.log(`使用提供的测试 OpenID: ${testOpenId}`);
            newWxOpenid.mp = testOpenId;
          } else {
            // 否则使用一个测试 OpenID
            console.log('使用默认测试 OpenID');
            newWxOpenid.mp = 'test_openid_for_withdrawal_test';
          }
        }
      } else {
        // 如果不存在，创建新对象
        console.log('检测到 wx_openid 不存在，创建新对象');
        newWxOpenid = {
          mp: testOpenId || 'test_openid_for_withdrawal_test'
        };
      }

      console.log(`更新 wx_openid 为: ${JSON.stringify(newWxOpenid)}`);
      await db.collection('users').doc(userId).update({
        wx_openid: dbCmd.set(newWxOpenid)
      });
      console.log('✅ OpenID 格式修复完成');
    }

    // 3. 增加可提现余额
    await db.collection('users').doc(userId).update({
      commission_available: dbCmd.inc(amount)
    });

    console.log(`✅ 成功添加 ${amount} 分到可提现余额`);

    // 4. 查询更新后的用户信息
    const updatedUserRes = await db.collection('users').doc(userId).get();
    const updatedUser = updatedUserRes.data[0];

    console.log(`更新后可提现余额：${updatedUser.commission_available || 0} 分`);
    console.log(`更新后wx_openid：${JSON.stringify(updatedUser.wx_openid)}`);
    console.log('========== 操作完成 ==========');

    return {
      code: 0,
      message: '添加余额成功',
      data: {
        userId: userId,
        nickname: updatedUser.nickname || '未设置昵称',
        addedAmount: amount,
        previousBalance: user.commission_available || 0,
        currentBalance: updatedUser.commission_available || 0,
        amountInYuan: (amount / 100).toFixed(2),
        wx_openid: updatedUser.wx_openid,
        openIdFixed: fixOpenId ? true : false
      }
    };

  } catch (error) {
    console.error('❌ 操作失败:', error);
    return {
      code: 500,
      message: `操作失败: ${error.message}`
    };
  }
};

